package com.hfy.music.service.impl;

import com.hfy.music.mapper.LikeMapper;
import com.hfy.music.service.LikeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import result.Result;

import static constants.RedisConstants.COMMENT_LIKE_KEY;
import static constants.RedisConstants.MUSIC_LIKE_KEY;

/**
 * @ author 韩
 * time: 2024/5/24 3:34
 */

@Service
public class LikeServiceImpl implements LikeService {

    @Autowired
    private LikeMapper likeMusicMapper;

    @Autowired
    private StringRedisTemplate redisTemplate;
    @Override
    public Result like(Long account,Integer biz, Integer bizId) {

        // 这里其实把这一个接口分为4个更好一点，耦合了喜欢/取消喜欢，音乐/评论的逻辑，两个if，耦合4个接口
        // 判断biz是0还是1，如果是0则执行音乐的喜欢/取消喜欢逻辑
        Integer id = likeMusicMapper.selectLike(biz,account,bizId);

        if (id == null) {
            // 没有创建过，证明没有喜欢，变成喜欢
            likeMusicMapper.like(biz,account, bizId);

            Integer temp = likeMusicMapper.selectLikeCount(biz, bizId);

            if (temp == null) {
                // 代表未点赞过 直接创建插入 初始化数据
                likeMusicMapper.insertLikeCount(biz,bizId);
            } else {
                // 直接操作mysql中的喜欢计数表
                likeMusicMapper.likeIncreaseOne(biz, bizId);
            }

            // 这是写逻辑 然后删缓存
            if (biz == 0) {
                redisTemplate.delete(MUSIC_LIKE_KEY + bizId);
            } else {
                redisTemplate.delete(COMMENT_LIKE_KEY + bizId);
            }

            return Result.ok("喜欢成功");
        } else {
            likeMusicMapper.unlike(biz,account, bizId);
            Integer temp = likeMusicMapper.selectLikeCount(biz, bizId);

            if (temp == null) {
                // 代表未点赞过 则无法删除数据 报错
                return Result.error("无法取消点赞无点赞计数记录的业务");
            }

            // 直接操作mysql中的喜欢计数表
            likeMusicMapper.likeDecreaseOne(biz, bizId);
            // 这是写逻辑 然后删缓存
            if (biz == 0) {
                redisTemplate.delete(MUSIC_LIKE_KEY + bizId);
            } else {
                redisTemplate.delete(COMMENT_LIKE_KEY + bizId);
            }
            return Result.ok("取消喜欢成功");
        }



    }
}
